/*******************************************************************************
 * CopyRight (c) 2020 
 *
 * \file    print_ctrl.c
 * \brief   调试输出控制模块
 * \author  张 靖
 * \version 1.0.0
 * \date    2020-06-22
 *
 * -----------------------------------------------------------------------------
 * 文件修改历史：
 * <时间>       | <版本>    | <作者>    | <描述>
 * 2020-05-02   | v1.0.0    | 张 靖     | 创建文件
 * -----------------------------------------------------------------------------
 ******************************************************************************/

/*================================= 头 文 件 =================================*/
#include <stdio.h>
#include <stdarg.h>
#include <time.h>
#include "publicdef.h"
#include "print_ctrl.h"

/*================================= 接口函数 =================================*/
/*!
 * \brief 调试输出接口
 *
 * \param[in] tag       调试级别
 * \param[in] tagstr    调试级别字符串
 * \param[in] fmt, ...  printf的可变参数
 */
int pr(int tag, char *tagstr, char *fmt, ...)
{
    if (tag <= PRINT_LEVEL) {
        va_list valist;

        /** 获取当前时间 */
        time_t timep;
        struct tm *p;
        time(&timep);
        p = localtime(&timep);

        va_start(valist, fmt); /**< 找到参数的起始位置 */
        printf("[%s]{%04d-%02d-%02d %02d:%02d:%02d} ",
                tagstr, 1900 + p->tm_year,
                1 + p->tm_mon, p->tm_mday,
                p->tm_hour, p->tm_min, p->tm_sec);
        vprintf(fmt, valist); /* 这里必须用vprintf */
        va_end(valist);
        printf("\n");
    }

    return 0;
}

/*!
 * \brief 调试信息加上级别、时间、文件名、函数名、文件行、换行信息
 *
 * \param[in] tag       调试级别
 * \param[in] tagstr    调试级别字符串
 * \param[in] filestr   文件名字符串
 * \param[in] funcstr   函数名字符串
 * \param[in] line      当前代码行数
 * \param[in] fmt, ...  printf的可变参数
 */
int pr_func(int tag, char *tagstr, char *filestr, const char *funcstr, int line, char *fmt, ...)
{
    if (tag <= PRINT_LEVEL) {
        va_list valist;

        time_t timep;
        struct tm *p;
        time(&timep);
        p = localtime(&timep);

        va_start(valist, fmt);
        printf("[%s]{%04d-%02d-%02d %02d:%02d:%02d}<%s %s() line:%d> ",
                tagstr, 1900 + p->tm_year,
                1 + p->tm_mon, p->tm_mday,
                p->tm_hour, p->tm_min, p->tm_sec,
                filestr, funcstr, line);
        vprintf(fmt, valist);
        va_end(valist);
        printf("\n");
    }

    return 0;
}
